SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE [dbo].[pje_porCarrerasdePostGrado] @idInscripcion as integer, @puntaje as float output , @resultado as integer AS
set nocount on --para anular el trafico econ el cliente (no salen los print)

/*este procedimiento calcula el puntaje para: carreras de Post-grado (Masters,Especialidades.doctorados) y Post-Títulos (Actualización académica, diplomatura, Especialización)
-- recibe como parámetro el identificador de la inscripción para una determinada convocatoria
y devuelve en @pje el puntaje correspondiente para este item*/

declare  @idAgente as int,@CargoGenerico as int,@AsignaturaGenerica as int, @idTipoConvocatoria as int ,@fechaLimite as datetime
declare @topePostGrados as float
declare @sum as float
declare @contador as smallint
DECLARE @PJEPORTITULO AS INT
declare @concepto  as int
DECLARE @Error INT
DECLARE @DuracionCarrera as int 
DECLARE @idantecedente as int
DECLARE @titulovalorado as int
DECLARE @CategoriaTitulo as int


BEGIN TRANSACTION
SET @ERROR=0

select @topePostGrados= isnull((select valor1 from tb_parametros where parametro like '%TopePostTitulos%' ),0)--idparametro=119               leo el  tope por Post-Grados y/o Post-Títulos

/*leo los datos de la inscripción: identificador del agente, cargo , asignatura tipo de convocatoria para la que se inscribe (ingreso, interinatos etc), y la fecha limite hasta la cual serán valorados
los antecedentes */

select  @idAgente=i.Agente,@cargoGenerico = i.CargoGenerico,@AsignaturaGenerica=i.AsignaturaGenerica,@idtipoConvocatoria=Conv.TipoConvocatoria,@FechaLimite=Conv.FechaLimite,
	@titulovalorado=isnull(titulovalorado,0),@CategoriaTitulo=i.categoriadetitulo
	from 	tb_inscripcionesConvocatorias i 
		join tb_Convocatorias conv on i.Convocatoria=conv.idConvocatoria 
	where i.idInscripcionConvocatoria=@idInscripcion

print 'Titulo valorado'
print @titulovalorado
print @categoriaTitulo



/*
select @concepto =case @idTipoConvocatoria 
when 1 then 2189
when 2 then  293
when 3 then  600
when 4 then 428
when 5 then 543
end

SELECT @PJEPORTITULO=PUNTAJE FROM TB_CALIFICACIONESDEINSCRIPCION WHERE INSCRIPCION=@idInscripcion AND CONCEPTO=@concepto
*/


--if @cargoGenerico >1000 SELECT @titulovalorado=isnull(titulovalorado,0) FROM tb_inscripcionesconvocatorias where idinscripcionconvocatoria=@idInscripcion    else set @titulovalorado=0

--if @cargoGenerico < 1000  set @titulovalorado=0

-- En Polimodal , para los titulos de Maestra de Grado, los posgrados se valoran sólo para el cargo de coordinador de curso o para las materias de primer año
-- me fijo si el título que tiene valorado es de al menos 4 años de duracion, en este caso si le va el posgrado caso contrario no



if @cargoGenerico >1000 select @DuracionCarrera=DuracionCarrera from tb_titulos where idtitulo in(@titulovalorado) else  set @DuracionCarrera=0

if @cargoGenerico >1000 and @DuracionCarrera <4 select @DuracionCarrera=DuracionCarrera from tb_titulos where idtitulo in(select tituloconcurrente from tb_inscripcionesconvocatorias where idinscripcionconvocatoria=@idInscripcion) else  set @DuracionCarrera=4


-- Cuando el titulo valorado es el de maestra, puede ocurrir que ademas de este titulo tenga otro título que tambien sea docente para el cargo valorado como el caso de la agente 57118 (doc 17083440)
-- en este caso el segundo título la habilita para darle el puntaje por postitulo entonces lo que hago es buscar si tiene otro título distinto al de maestra y en caso afirmativo
-- actualizo el titulovalorado en las tablas tb_inscripcionesconvocatorias y la tb_calificacionesdeinscripcion
-- esto ocurre solamente para nivel medio con los cargos de auxiliar docente
-- modificación del 06/08/2010
if   @titulovalorado in(80550,50850,37200,37800,46480,37800) and @cargoGenerico >1000   --son los titulos de maestra y que el cargo sea >1000 para no entrar en el caso de primaria
begin
	select  top 1 @CategoriaTitulo=categoria,@titulovalorado=titulo3  
		from tb_titulosDelAgente TA
		join tb_titulos T on TA.titulo=T.idTitulo
		join tb_AnexoTitulos A on TA.titulo=A.Titulo3 
		join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=Ta.GrupoIncumbencia
		join tb_incumbencias H on G.idGrupoIncumbencia=H.grupoIncumbencia		
		join tb_categoriasDeTitulo C on C.idcategoria=A.Categoria
	where   TA.agente=@idAgente and A.cargoGenerico=@CargoGenerico and A.asignaturaGenerica=@AsignaturaGenerica AND H.cargoGenerico=@CargoGenerico AND H.asignaturaGenerica=@AsignaturaGenerica  and TA.FechaPresentacion <= @FechaLimite--and (G.IDgrupoIncumbencia= @grupoIncumbencia or G.IDgrupoIncumbencia= @grupoIncumbencia1 OR  G.IDgrupoIncumbencia=99) 
		and (titulo1 is NULL or titulo1 in (select titulo from tb_titulosDelAgente TT join tb_gruposDeIncumbencias GG on GG.idGrupoIncumbencia=TT.GrupoIncumbencia join tb_incumbencias hh on GG.idGrupoIncumbencia=hh.grupoIncumbencia	where TT. Agente = @idAgente  and TT.FechaPresentacion <= @FechaLimite and hh.cargoGenerico=@CargoGenerico and hh.asignaturaGenerica=@AsignaturaGenerica))
		and (titulo2 is NULL or titulo2 in (select titulo from tb_titulosDelAgente TT join tb_gruposDeIncumbencias GG on GG.idGrupoIncumbencia=TT.GrupoIncumbencia join tb_incumbencias hh on GG.idGrupoIncumbencia=hh.grupoIncumbencia	where TT.Agente = @idAgente   and TT.FechaPresentacion <= @FechaLimite and hh.cargoGenerico=@CargoGenerico and hh.asignaturaGenerica=@AsignaturaGenerica))
		and titulo3 not in(80550,50850,37200,37800,46480,37800)
		and categoria in (1,2)
--	order by categoria Asc,titulo1,titulo2,titulo3, FechaEgreso Asc
	order by categoria Asc, FechaEgreso Asc
	print 'Categoria de título y Titulo valorado'
	print @categoriaTitulo
	print @titulovalorado
	
	if isnull(@titulovalorado,0)  <> 0 	
	BEGIN
		DECLARE ins CURSOR FORWARD_ONLY FOR
		SELECT distinct c.inscripcion 
		FROM tb_InscripcionesConvocatorias i 
		JOIN tb_CalificacionesDeInscripcion c
		ON i.idInscripcionConvocatoria = c.inscripcion
		 WHERE Agente=@idAgente AND asignaturagenerica=@AsignaturaGenerica
		 AND Concepto IN (SELECT idconcepto FROM tb_ConceptosDePuntaje WHERE Descripcion LIKE '%título valorado%')
		
		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir
		OPEN ins
			FETCH NEXT FROM ins INTO @idInscripcion

		WHILE @@FETCH_STATUS = 0 
		BEGIN
			print 'entre en el while del cursor'
			print @titulovalorado
			print @idInscripcion
			UPDATE tb_CalificacionesDeInscripcion SET Puntaje=@titulovalorado WHERE inscripcion=@idInscripcion and concepto in  (SELECT idconcepto FROM tb_ConceptosDePuntaje WHERE Descripcion LIKE '%título valorado%')
			UPDATE tb_inscripcionesconvocatorias SET titulovalorado=@titulovalorado WHERE idinscripcionconvocatoria=@idInscripcion
			FETCH NEXT FROM ins INTO @idInscripcion
		END
		close ins
		deallocate ins
	END
END

-- ME FIJO  EL PUNTAJE POR TITULO YA QUE ESTE ITEM SE VALORA SOLO PARA LOS TITULOS DOCENTES O HABILITANTES CON CAPAC.
Select @PJEPORTITULO = CASE @CategoriaTitulo
when 1 then 27
when 2 then  24
when 3 then  18
when 4 then 15
when 5 then 12
when 6 then 9
else 0
end
print  @PJEPORTITULO

if   @PJEPORTITULO > 18 and not (@cargoGenerico  in (5390,5235,5245) and @titulovalorado in(80550,50850,37200,37800,46480,37800)) -- Se excluyen los cargos de Aux de secretaria, Aux Docente, Bibliotecario  para las Maestras
	begin
PRINT 'TIENE POSTITULO'
	declare c cursor forward_only for
	select 
		  isnull (PuntajeParaIncumbencias,0)  Puntaje,idantecedente
	from tb_antecedentes a 
		join tb_tiposAntecedentes t on a.tipo=t.idtipoantecedente 
		join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=a.GrupoIncumbencias
--		join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
		join tb_incumbencias h on G.idGrupoincumbencia=h.grupoIncumbencia
    	         where a.rubro in (22)  and agente=@idagente and h.CargoGenerico=@Cargogenerico 
		and @DuracionCarrera >=4 -- Obtengo todos los  Poost-grados (en este caso con duración de la carrera del titulo valorado >= 4)
		and h.AsignaturaGenerica=@AsignaturaGenerica and a.FechaPresentacion <= @FechaLimite--sumo todos los artículos que tiene el agente

	union                   -- esta unión se agregó el 16/11/2009 por que los postitulos no necesitan que la duracion de la carrera sea de 4 años, en cambio las carreras de posgrado  SI

	select 
		  isnull (PuntajeParaIncumbencias,0)  Puntaje,idantecedente
	from tb_antecedentes a 
		join tb_tiposAntecedentes t on a.tipo=t.idtipoantecedente 
		join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=a.GrupoIncumbencias
--		join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
		join tb_incumbencias h on G.idGrupoincumbencia=h.grupoIncumbencia
    	         where a.rubro in (23)  and agente=@idagente and h.CargoGenerico=@Cargogenerico -- Se otienen los Post-Títulos (no necesita que la duracion sea de 4 años al menos)
		and h.AsignaturaGenerica=@AsignaturaGenerica and a.FechaPresentacion <= @FechaLimite
		-- ANULADO El 18/01/2010 OJOOOOOOO      and @titulovalorado not in (46480,80280,91639,91783,91829)    --Los títulos que poseen las maestras (que se anotan para auxiliar docente o aux de secretaria) no pertenecen
	order by Puntaje Desc                                                                                 -- al nivel polimodal, por consiguiente NO SE VALORAN los posgrados en estos casos.  

	SET @Error = @@ERROR 
	IF @Error <> 0 GOTO Salir
	
	open c
	fetch next from c into @sum,@idantecedente
	set @puntaje=0
	set @contador = 0

	while @@FETCH_STATUS = 0 and @contador<2 --sumo los dos de mayor puntaje
	begin
		set @contador=@contador+1
		set @puntaje=@puntaje+@sum
		fetch next from c into @sum,@idantecedente
	end

	close c
	deallocate c

	if  @puntaje > @topePostGrados set @puntaje = @topePostGrados 

	end

print @puntaje

Salir:
IF @Error <> 0 
	ROLLBACK TRANSACTION
ELSE 
	COMMIT TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[pje_porCarrerasdePostGrado] TO [Juntas]
GO
